#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define SIZE 10

int * test() {
	int a = 10; //创建局部变量a
	//出了该函数后 该变量就便销毁
	return &a;
}
int main() {
	//野指针就是指针指向的位置是不可知的（随机的、不正确的、没有明确限制的）
	//造成的原因: 1.指针未初始化
	//int * p; //p是一个局部的指针变量，局部变量不初始化的话，默认是随机值
	//*p = 20; //非法访问内存了
	
	//2.越界访问
	//int arr[10] = { 0 };
	//int* p = arr;
	//int i = 0;
	//for (i = 0; i <= 10; i++)
	//{
	//	*p = i; //当指针指向的范围超出数组arr的范围时，p就是野指针
	//	p++;
	//}
	
	//3.指针指向的空间释放
	int *p= test();
	// *p里面存的是a的地址，a的生命周期没了，a不会因为*p而改变
	*p = 20; //相当没有初始化

	//如何规避野指针
	//	1.指针初始化
	//   //当前不知道p应该初始化为什么地址的时候，直接初始化为NULI
		//int * P = NULL;
		//明确知道初始化的值
		/*	int a = 10;
			int* ptr = &a;*/
		//C语言本身是不会检查数据的界行为的
	//	2.小心指针越界
	//	3.指针指向空间释放及时置NULL
	//	4.指针使用之前检查有效性 例如：
	/*	int* p = NULL;
		if (p !=NULL)
		{
			*p = 10;
		}*/


	return 0;
}
 